home *** CD-ROM | disk | FTP | other *** search
/ Nebula 2 / Nebula Two.iso / SourceCode / GameKit / Headers / gamekit / GameView.h < prev    next >
Text File  |  1995-06-12  |  6KB  |  147 lines

  1.  
  2. // A generic class used to handle lots of the logic found in a game like
  3. // pausing, misc. states, backgrounds, etc.  It has
  4. // rudimentary key and mouse handling methods; it's up to a subclass to
  5. // define them further as is appropriate.
  6.  
  7. #import <appkit/appkit.h>
  8.  
  9. #define GKKEYCODE (myevent->data.key.charCode)
  10. #define BEZELSIZE 8.0    // width of the bezel border...
  11.  
  12. #define GRANULARITY 0.05    // timer granularity.  Screen should be updated
  13. #define CYCLES 1            // every 0.05 sec., so here, 2*0.025 = 0.05
  14. #define SPEEDUP 20            // how often to speed up game (every x columns)
  15. #define INITCY 8            // initial colCycles = INITCY * CYCLES
  16.  
  17. // kinds of key events passed to the player object
  18. #define GK_ALL_KEYUP    0    // passed to "release all keys" (view loses focus)
  19. #define GK_KEYDOWN        1
  20. #define GK_KEYUP        2
  21.  
  22. // directions
  23. #define GK_NO_DIRECTION -1
  24. #define GK_LEFT_DIRECTION 3
  25. #define GK_RIGHT_DIRECTION 1
  26. #define GK_UP_DIRECTION 0
  27. #define GK_DOWN_DIRECTION 2
  28. #define GK_NORTHEAST_DIRECTION 4
  29. #define GK_NORTHWEST_DIRECTION 5
  30. #define GK_SOUTHEAST_DIRECTION 6
  31. #define GK_SOUTHWEST_DIRECTION 7
  32.  
  33. // left here for compatability's sake with older versions
  34. #define LEFT GK_LEFT_DIRECTION
  35. #define RIGHT GK_RIGHT_DIRECTION
  36. #define UP GK_UP_DIRECTION
  37. #define DOWN GK_DOWN_DIRECTION
  38. #define NORTHEAST GK_NORTHEAST_DIRECTION
  39. #define NORTHWEST GK_NORTHWEST_DIRECTION
  40. #define SOUTHEAST GK_SOUTHEAST_DIRECTION
  41. #define SOUTHWEST GK_SOUTHWEST_DIRECTION
  42.  
  43. // states -- tells autoUpdate what to do; a subclass of this view would add
  44. // whatever it needs in the way of new states.
  45. #define NORMALSTATE 0    // player's pill dropping
  46. #define GAMEOVER 1        // things still blink, etc.
  47.             
  48. #define WAITFORDEMO 600        // Wait x cycles before gameover to start demo
  49. // 600 cycles is approx. 30 sec, more or less.
  50.  
  51. @interface GameView:View
  52. {
  53.     id  backGround;
  54.     id  scoreKeeper;        // tracks player's score
  55.     id  strings;            // localized strings
  56.     id  customSound;        // call to handle the sounds
  57.     id  preferences;        // PreferencesBrain
  58.     id  dirtPile;            // Object to handle flushing
  59.     id  buffer;                // screen buffer
  60.     id  staticBuffer;        // screen buffer holds maze, etc.
  61.     id  controller;            // Game controller (GameBrain) reports level, etc.
  62.     id  animator;            // Animator instance
  63.     id  listenerId;            // Grabs Workspace messages for drag and drop.
  64.     int state;                // current state
  65.     int cycles;                // used to blink things, etc. -- counts frames
  66.     int demoWait;            // how many cycles to wait before demo
  67.     char keys[5];            // keys to play game
  68.     BOOL paused;            // game is paused if == YES
  69.     BOOL grayBorder;        // == YES if gray border is on
  70.     BOOL doingBorder;        // == YES if turning border on/off
  71.     BOOL demoMode;            // keep brain from putting demo score as high
  72.     BOOL backIsColor;
  73.     NXColor backColor;
  74.     NXDragOperation dragOperation;
  75.     NXPoint offset;            // holds x/y offset of "real drawing area" allows
  76.                 // drawing machinery to deal with scrolling windows over a
  77.                 // much larger play area, or a view which is larger than the
  78.                 // play area, and draw the play area as an inset...
  79. }
  80.  
  81. // initialization and start up functions
  82. - initFrame:(const NXRect *)frm;    // initialize instance
  83. - appDidInit:sender;        // forwarded by gamebrain
  84. - loadPix;                // gameBrain calls this from appDidInit
  85. - animate:sender;        // start animation-call from appDidInit
  86.  
  87. // return info about game state and so on...
  88. - (int)gameState;        // returns current state
  89. - (int)realGameState;    // tell caller our state...may need to really know...
  90. - (BOOL)demoMode;        // if last game was demo or in demo now
  91. - (float)speedTime;        // returns current speed
  92. - (BOOL)isPaused;        // tell caller if we're paused
  93. - autoUpdate:sender;    // sent by timer
  94. - pause:sender;            // pause game
  95. - unpause:sender;        // unpause game
  96. - getPreferences;        // set up preference inst. variables
  97. - getOffset:(NXPoint *)aPoint;    // returns offset by reference
  98. - setOffset:(const NXPoint *)aPoint;    // change the offset
  99.  
  100. // various view methods; many are overridden from the default NeXTstep
  101. // methods... basically, deal with various event types.
  102. - (BOOL)acceptsFirstResponder;    // to grab keyboard events
  103. - updateSelf:(NXRect *)rects :(int)rectCount;  //used by internals for speed
  104. - (BOOL)acceptsFirstMouse;        // let us grab activating mousedowns
  105. - mouseDown:(NXEvent *)event;    // handle mouseDown events.
  106. - keyDown:(NXEvent *)myevent;    // handle keyDown events.
  107. - setKey:(int)keyIndex val:(char)keyVal;  // change key we respond to
  108. - setUpScreen;                    // set up the game screen
  109. - changeBorder:(BOOL)borderOn;    // move view about in the window & do sizing
  110. - restartGame;                    // reset internal variables to restart level
  111.  
  112. // background handling methods.  Set various files, render the background,
  113. // resize it, and deal with drag and drop colors.  The specific background
  114. // stuff comes from BreakApp; the color stuff and any modifications are mine.
  115. - setBackgroundFile:(const char *)fileName andRemember:(BOOL)remember;
  116. - buildBackground;    // allows hook to add static stuff on top of image
  117. - changeBackground:sender;
  118. - revertBackground:sender;
  119. - sizeTo:(NXCoord)width :(NXCoord)height;
  120. - loadAnImage:(const char *)imageName;
  121. - back1:sender;
  122. - back2:sender;
  123. - back3:sender;
  124. - drawBackground:(NXRect *)rect;
  125. // Note:  although this is an "obsolete" API in 3.0, it's OK because
  126. //    I use the new 3.0 drag and drop methods (as I should) and then
  127. //    have them call this when appropriate.  Note that NEXTSTEP no
  128. //    longer does that, however; I do it explicitly!  So in the GameKit,
  129. //    it is NOT obsolete...it is supported. :)
  130. - acceptColor:(NXColor)color atPoint:(const NXPoint *)aPoint;
  131. - writeColor;
  132.  
  133. // rebuild staticBuffer
  134. - rebuildStaticBuffer;
  135. - rebuildStaticAt:(NXRect *)rect;
  136.  
  137. // drag & drop images & color
  138. - (NXDragOperation)draggingEntered:sender;    
  139. - (NXDragOperation)draggingUpdated:sender;
  140. - draggingExited:sender;
  141. - (BOOL)prepareForDragOperation:sender;
  142. - (BOOL)performDragOperation:sender;
  143. - concludeDragOperation:sender;
  144. - gameOver;    // sent by GameBrain
  145.  
  146. @end
  147.